package bytecode;

/**
 * 测试即时编译器
 * VM参数：-XX:+PrintCompilation  要求虚拟机在即时编译时将被编译成本地代码的 方法名称打印出来 其中带有“%”的输出说明是由回边计数器触发的 OSR编译
 */
public class JITCompiler {

    public static final int NUM = 15000;

    public static int doubleValue(int j) {
        for (int i = 0; i < 100000; i++) ;
        return j * 2;
    }

    public static long calcSum() {
        long sum = 0;
        for (int i = 0; i < 100; i++) {
            sum += doubleValue(i);
        }
        return sum;
    }

    public static void main(String[] args) {

        for (int i = 0; i < NUM; i++) {
            calcSum();
        }
    }

/*
     99    1       3       java.lang.String::hashCode (55 bytes)
    100    3       3       java.lang.String::equals (81 bytes)
    100    5     n 0       java.lang.System::arraycopy (native)   (static)
    100    6       3       java.lang.System::getSecurityManager (4 bytes)
    100    7       3       java.lang.CharacterData::of (120 bytes)
    101    8       3       java.lang.CharacterDataLatin1::getProperties (11 bytes)
    101   10       3       java.lang.StringBuilder::append (8 bytes)
    101   11       3       java.io.WinNTFileSystem::normalize (143 bytes)
    101    9       1       java.lang.ref.Reference::get (5 bytes)
    101   12       3       java.lang.AbstractStringBuilder::append (50 bytes)
    102    2       4       java.lang.String::length (6 bytes)
    102    4       4       java.lang.String::charAt (29 bytes)
    102   13       3       java.lang.Character::toLowerCase (9 bytes)
    103   16       3       java.lang.Object::<init> (1 bytes)
    103   14       3       java.lang.CharacterDataLatin1::toLowerCase (39 bytes)
    103   15       3       sun.nio.cs.ext.DoubleByte$Encoder::encodeChar (21 bytes)
    103   17       4       java.lang.AbstractStringBuilder::ensureCapacityInternal (27 bytes)
    104   18       3       java.lang.String::startsWith (72 bytes)
    104   19       3       java.lang.String::startsWith (7 bytes)
    104   21       3       java.lang.String::toCharArray (25 bytes)
    104   20       1       sun.instrument.TransformerManager::getSnapshotTransformerList (5 bytes)
    104   23       4       java.lang.AbstractStringBuilder::append (29 bytes)
    104   22       3       java.io.WinNTFileSystem::isSlash (18 bytes)
    105   26       3       java.lang.String::indexOf (70 bytes)
    105   25  s    3       java.lang.StringBuffer::append (13 bytes)
    105   27       3       java.util.HashMap::hash (20 bytes)
    105   24       3       java.io.WinNTFileSystem::isLetter (30 bytes)
    106   28 %     3       bytecode.JITCompiler::doubleValue @ 2 (18 bytes)
    106   29       3       bytecode.JITCompiler::doubleValue (18 bytes)
    106   30 %     4       bytecode.JITCompiler::doubleValue @ 2 (18 bytes)
    107   28 %     3       bytecode.JITCompiler::doubleValue @ -2 (18 bytes)   made not entrant
    107   31       4       bytecode.JITCompiler::doubleValue (18 bytes)
    107   29       3       bytecode.JITCompiler::doubleValue (18 bytes)   made not entrant
    107   32       3       bytecode.JITCompiler::calcSum (26 bytes)
    108   33 %     4       bytecode.JITCompiler::calcSum @ 4 (26 bytes)
    109   34       3       java.lang.String::indexOf (7 bytes)
    109   35       3       java.lang.String::<init> (82 bytes)
    109   36       3       java.lang.Character::toLowerCase (6 bytes)
    109   37       4       bytecode.JITCompiler::calcSum (26 bytes)
    110   38       3       java.lang.Math::min (11 bytes)
    110   32       3       bytecode.JITCompiler::calcSum (26 bytes)   made not entrant
*/

}
